home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
COMAL
/
A-COMAL Series
/
(k)aaj.d64
/
src.irq
< prev
next >
Wrap
Text File
|
2007-02-28
|
8KB
|
409 lines
;
;--------------------------------;
; ;
; SRC.IRQ (COMAL PACKAGE) ;
; ;
; EXTENDING COMAL WITH PROC'S & ;
; FUNC'S TO MAKE INTERRUPT FROM ;
; COMAL POSSIBLE IN AN EASY WAY ;
; ;
; PROCEDURES: ;
; SETALARM(TIME$) ;
; SETCOUNT(INT) ;
; COUNT(FLAG) ;
; FUNCTIONS: ;
; SSCOL ;
; SDCOL ;
; EVENT ;
; ;
; BY M.BOKHORST, 850921 ;
; REVISED BY D.KLINGENS ;
; DUTCH COMAL USERS GROUP ;
; ;
; LAST CHANGE: 860604 ;
; ;
; +-------------------+ ;
; ! DON'T USE RS232 ! ;
; +-------------------+ ;
; ;
;--------------------------------;
;
FALSE = 0
TRUE = 1
DEFPAG = %01000110
FUNC = 227
ENDFNC = 126
ENDPRC = 126
PROC = 112
VALUE = 114
INT = 1
STR = 2
PSHINT = $C9CE
FNDPAR = $C896
COPY1 = $45
CINV = $0314
EXCINF = $4D
ESCMET = $08
D1ICR = $DC0D
ALARM = 4
SPRSPR = $D01E
SPRBCK = $D01F
SRQ = $04
DSCRD = 3
DUMMY = $CA2F
ARG = 1
RUNERR = $C9FB
SRQON = $20
OVRLAY = $DE00
PAGE = 6
IRQMSK = $D01A
D1CRB = $DC0F
CALL = $C881
ERROR = 9
IRQRAM = $C100+$80
R6510 = 1
SPINT = $03FE
ICR = $03FF
IRQOCC = $D019
;
; SPINT IDENTIFIES A SPECIAL
; INTERRUPT, NOT FOR COMAL
; THIS VARIABLE EXISTS TO SAVE
; TIME FOR ALREADY HANDLED IRQ'S
;
; BOTH RS232 BUFFERS ARE USED BY
; CHANGE AND FIND!
;
;----- START OF PACKAGE ---------;
;
* = $9000
;
;--------------------------------;
;
.BYTE DEFPAG
.WORD END
.WORD SIGNAL
;
.BYTE 3,'IRQ'
.WORD PRTAB
.WORD INIT
.BYTE 0
;
;--------------------------------;
;
PRTAB
;
.BYTE 5,'EVENT'
.WORD HEVENT
.BYTE 5,'SSCOL'
.WORD HSPRIT
.BYTE 5,'SDCOL'
.WORD HDATA
.BYTE 5,'COUNT'
.WORD HCNT
.BYTE 8,'SETCOUNT'
.WORD HSET
.BYTE 8,'SETALARM'
.WORD HALARM
.BYTE 0
;
;--------------------------------;
;
HEVENT
;
.BYTE FUNC ;FUNC EVENT
.WORD EVENT
.BYTE 0
.BYTE ENDFNC
;
HSPRIT
;
.BYTE FUNC ;FUNC SSCOL
.WORD SPR
.BYTE 0
.BYTE ENDFNC
;
HDATA
;
.BYTE FUNC ;FUNC SDCOL
.WORD DAT
.BYTE 0
.BYTE ENDFNC
;
HCNT
;
.BYTE PROC ;PROC COUNT
.WORD SETCNT
.BYTE 1
.BYTE VALUE+INT
.BYTE ENDPRC
;
HSET
;
.BYTE PROC ;PROC
.WORD SET ; SETCOUNT
.BYTE 1
.BYTE VALUE+INT
.BYTE ENDPRC
;
HALARM
;
.BYTE PROC ;PROC ALARM
.WORD ALRM
.BYTE 1
.BYTE VALUE+STR
.BYTE ENDPRC
;
;--------------------------------;
; CODE FOR PROC SETCOUNT(INT) ;
; INT: 0-255 ;
;--------------------------------;
;
SET LDA #1
JSR FNDPAR
LDY #0
LDA (COPY1),Y
BEQ VALOK
ARGERR LDX #ARG
JMP RUNERR
VALOK INY
LDA (COPY1),Y
BEQ ARGERR
SEI
STA CNTVAL
STA CNTING
CLI
RTS
;
;--------------------------------;
; CODE FOR SOME FUNCS ;
; REGISTERS ARE RESET AFTER READ ;
;--------------------------------;
;
EVENT LDX OCUR
SEI
LDA #FALSE
STA OCUR
BEQ RETURN
SPR LDX SPRITE
SEI
LDA #FALSE
STA SPRITE
BEQ RETURN
DAT LDX DATA
SEI
LDA #FALSE
STA DATA
RETURN CLI
JMP PSHINT
;
;--------------------------------;
; CODE FOR PROC COUNT(INT) ;
; INT=0: STOP COMAL COUNTER ;
; INT=1: START COMAL COUNTER;
;--------------------------------;
;
SETCNT LDA #1
JSR FNDPAR
LDY #0
LDA (COPY1),Y
INY
ORA (COPY1),Y
STA COUNT
RTS
;
;--------------------------------;
; CODE FOR PROC SETALARM(STR) ;
; STR: HH:MM:SS.T ;
; THE SAME AS FOR SETTIME ;
;--------------------------------;
;
ALRM LDA D1CRB
ORA #128
STA D1CRB
JSR CALL
.BYTE $80
.WORD $A7FF
ERR LDA D1CRB
AND #127
STA D1CRB
RTS
;
;--------------------------------;
; INIT ROUTINE PACKAGE ;
; SETUP IRQ & VARIABLES ;
;--------------------------------;
;
INIT LDX #ENDIRQ-IRQ
LOOP LDA IRQ,X
STA IRQRAM,X
DEX
BPL LOOP
LDA #<IRQRAM
LDY #>IRQRAM
SEI
STA CINV
STY CINV+1
LDA #FALSE
STA COUNT
STA DATA
STA SPRITE
STA OCUR
STA SPINT
CLI
LDA EXCINF ;LET COMAL
ORA #SRQON ;KNOW THAT
STA EXCINF ;SRQ IS ON
LDA #%10000100
STA D1ICR ;ALARM ON
LDA IRQMSK
ORA #%00000110
STA IRQMSK ;COL'S ON
RTS
;
;--------------------------------;
; SUBROUTINE TEST: TEST FOR ;
; SPECIAL EVENTS ;
;--------------------------------;
;
TEST LDA EXCINF
AND #ESCMET
BEQ NOESC
LDA #%00000001
JSR SETUP
;
NOESC LDA D1ICR
STA ICR ;FOR COMAL
AND #ALARM
BEQ NOALRM
LDA #TRUE
STA SPINT
LDA #%00000010
JSR SETUP
;
NOALRM LDA IRQOCC
AND #4
BEQ NOSPR
LDA SPRSPR
PHA
ORA SPRITE
STA SPRITE
PLA
STA $C268 ;FOR COMAL
ORA $C26C ;FUNC
STA $C26C ;SPRITECOL
LDA #TRUE
STA SPINT
LDA #%00000100
JSR SETUP
;
NOSPR LDA IRQOCC
AND #2
BEQ NODATA
LDA SPRBCK
PHA
ORA DATA
STA DATA
PLA
STA $C269 ;FOR COMAL
ORA $C26E ;FUNC
STA $C26E ;DATACOL
LDA #TRUE
STA SPINT
LDA #%00001000
JSR SETUP
;
NODATA LDA COUNT
BEQ NOCNT
DEC CNTING
BNE NOCNT
LDA CNTVAL
STA CNTING
LDA #%00010000
JSR SETUP
;
NOCNT LDA #%00000110
STA IRQOCC ;RESET VIC
RTS
;
;--------------------------------;
; SUBROUTINE SETUP: LATCH EVENTS ;
;--------------------------------;
;
SETUP ORA OCUR
STA OCUR
LDA EXCINF
ORA #SRQ
STA EXCINF
RTS
;
;--------------------------------;
; PACKAGE SIGNAL ROUTINE ;
;--------------------------------;
;
SIGNAL CPY #DSCRD
BNE LETON
LDA #<$C3BF
LDY #>$C3BF
SEI
STA CINV
STY CINV+1
CLI
OKDONE RTS
LETON CPY #ERROR
BNE OKDONE
JMP ERR ;RESET
; SETALARM
;
;--------------------------------;
; NEW IRQ ROUTINE ;
; NOTICE THAT THE FIRST PART OF ;
; THE COMAL ROUTINE IS SKIPPED ;
; THIS ROUTINE IS TRANSFERED TO ;
; IRQRAM (RAM!) ;
;--------------------------------;
;
IRQ LDA PAGE
PHA
LDA R6510
PHA
LDA #$36
STA R6510
LDA #$E0 ;SELECT RAM
STA PAGE
STA OVRLAY
JSR TEST
PLA
STA R6510
LDA SPINT
BEQ GOCOML
LDA #FALSE
STA SPINT
PLA
STA PAGE
STA OVRLAY
JMP $EA81
GOCOML LDA #$83 ;COMAL PAGE
STA PAGE
STA OVRLAY
LDA ICR
JMP $C3CC
ENDIRQ
;
;--------------------------------;
; SOME VARIABLES ;
;--------------------------------;
;
OCUR .BYTE 0
SPRITE .BYTE 0
DATA .BYTE 0
COUNT .BYTE 0
CNTING .BYTE 0
CNTVAL .BYTE 0
;
;--------------------------------;
; AND FINALLY THE ;
; ;
END .END ;
;--------------------------------;